{$CLEO .qa}
{$USE CLEO+}
{$USE Audio}
{$USE newOpcodes}
{$USE ini}

0000: NOP

script_name "SWPCAR"

// By ArtemQa146

const
    sweeper_car = 31@
    sweeper_driver = 30@
    sweeper_particle = 29@
    rotate_1 = 28@
    particle_mode = 27@
end

0085: particle_mode = 3@ // (int)

repeat
wait 0
model.Load(574)
until model.Available(574)

model.Load(50)
if
    not model.Available(50)
then
    repeat
    wait 0
    model.Load(50)
    until model.Available(50)
end
038B: load_requested_models
00A5: sweeper_car = create_car 574 at 0@ 1@ 2@
064B: sweeper_particle = create_particle "vent" at 0.0 0.0 0.0 type 1
064C: make_particle sweeper_particle visible
0129: sweeper_driver = create_actor_pedtype 21 model 50 in_car sweeper_car driverseat
model.Destroy(574)
model.Destroy(50)
rotate_1 = 0.0
00AE: set_car sweeper_car traffic_behaviour_to 4 //   
00AF: set_car sweeper_car driver_behaviour_to 1 //    
00AD: set_car sweeper_car max_speed_to 5.0

repeat
wait 10
    if and
        056D:   actor sweeper_driver defined
        056E:   car sweeper_car defined
    then

        080E: get_actor sweeper_driver ped_event_to 1@
        if or
            1@ == 49
            0118:   actor sweeper_driver dead
            0119:   car sweeper_car wrecked
            not locate_char_distance_to_car $PLAYER_ACTOR car sweeper_car radius 150.0
            not locate_char_distance_to_car sweeper_driver car sweeper_car radius 20.0
            not $ACTIVE_INTERIOR == 0
        then
            00AD: set_car sweeper_car max_speed_to 20.0
            break
        end
        
        0E40: get_current_hour 1@
        0D59: get_current_weather_to 2@
        if or
            1@ >= 10
            2@ == 8
            2@ == 16
        then
            00AD: set_car sweeper_car max_speed_to 20.0
            break
        end

    
    
        if and
            locate_char_distance_to_car $PLAYER_ACTOR car sweeper_car radius 40.0
            00DB:   actor sweeper_driver in_car sweeper_car
        then
    
            0A97: 1@ = car sweeper_car struct
            0D4E: 1@ = read_struct 1@ offset 0x18 size 4
            0AA7: call_function 0x4C5400 num_params 2 pop 2 "miscb" 1@ 2@
            if
                2@ <> 0
            then
                2@ += 0x10
                rotate_1 += 1.0
                0AA6: call_method 0x59B020 struct 2@ num_params 1 pop 0 rotate_1 // Rotate Z
                if and
                    timerb > 50
                    particle_mode == 1
                then
                    0D4E: 3@ = read_struct 2@ offset 0x30 size 4
                    0D4E: 4@ = read_struct 2@ offset 0x34 size 4
                    0D4E: 5@ = read_struct 2@ offset 0x38 size 4
                    02E3: 1@ = car sweeper_car speed
                    if 1@ > 1.5
                    then 4@ += 1.5
                    else 4@ += 0.3
                    end
                    0407: store_coords_to 3@ 4@ 5@ from_car sweeper_car with_offset 3@ 4@ 5@
                    0EC0: add_fx_system_particle sweeper_particle coord 3@ 4@ 5@ vel 0.0 0.0 0.0 size 1.0 brightness 1.0 rgba 1.0 1.0 1.0 1.0 lastFactor 0.5
                end
            end

            0A97: 1@ = car sweeper_car struct
            0D4E: 1@ = read_struct 1@ offset 0x18 size 4
            0AA7: call_function 0x4C5400 num_params 2 pop 2 "misca" 1@ 2@
            if
                2@ <> 0
            then
                2@ += 0x10
                rotate_1 += 1.0
                0AA6: call_method 0x59B020 struct 2@ num_params 1 pop 0 rotate_1 // Rotate Z
                if and
                    timerb > 50
                    particle_mode == 1
                then
                    0D4E: 3@ = read_struct 2@ offset 0x30 size 4
                    0D4E: 4@ = read_struct 2@ offset 0x34 size 4
                    0D4E: 5@ = read_struct 2@ offset 0x38 size 4
                    02E3: 1@ = car sweeper_car speed
                    if 1@ > 1.5
                    then 4@ += 1.5
                    else 4@ += 0.3
                    end
                    0407: store_coords_to 3@ 4@ 5@ from_car sweeper_car with_offset 3@ 4@ 5@
                    0EC0: add_fx_system_particle sweeper_particle coord 3@ 4@ 5@ vel 0.0 0.0 0.0 size 1.0 brightness 1.0 rgba 1.0 1.0 1.0 1.0 lastFactor 0.5
                    timerb = 0
                end
            end
            
        end
        
        
    else
        break
    end
until not player.Defined(0)

0650: destroy_particle sweeper_particle

if 056D:   actor sweeper_driver defined
then 01C2: remove_references_to_actor sweeper_driver // Like turning an actor into a random pedestrian
end
if 056E:   car sweeper_car defined
then 01C3: remove_references_to_car sweeper_car
end

wait 120000

0A93: terminate_this_custom_script

